/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.controler.jdbc;

import com.camachosanchez.bean.Baterias;
import com.camachosanchez.bean.Categorias;
import com.camachosanchez.bean.ControlCambioNeumatico;
import com.camachosanchez.bean.DetalleControlCambioBateria;
import com.camachosanchez.bean.DetalleControlCambioNeumatico;
import com.camachosanchez.bean.MarcasBaterias;
import com.camachosanchez.bean.MarcasNeumatico;
import com.camachosanchez.bean.ModelosBandaNeumatico;
import com.camachosanchez.bean.Neumaticos;
import com.camachosanchez.bean.TipoPiso;
import com.camachosanchez.util.ConexionSQL;
import com.camachosanchez.util.JPAUtil;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

/**
 *
 * @author Zully
 */
public class ControlCambioNeumaticoJdbcControler {

    public List<DetalleControlCambioNeumatico> findUltimoDetalleControlCambio(int idVehiculo) {
        List<DetalleControlCambioNeumatico> lst = new ArrayList<DetalleControlCambioNeumatico>();
        Connection cn = ConexionSQL.obtenerConexion();
        Statement st;
        try {
            st = cn.createStatement();
            ResultSet rs = st.executeQuery("SELECT d.id_neumatico, n.codigo, n.num_renovaciones, mo.medida, m.nombre, d.tipo, d.posicion, "
                    + " t.nombre, n.id_categoria, n.num_serie, c.id_piloto"
                    + " FROM detalle_control_cambio_neumatico d"
                    + " INNER JOIN control_cambio_neumatico c ON c.id = d.id_control_cambio_neumatico"
                    + " INNER JOIN neumaticos n ON n.id = d.id_neumatico"
                    + " LEFT JOIN marcas_neumatico m ON m.id = n.id_marca"
                    + " LEFT JOIN modelos_banda_neumatico mo ON mo.id = n.id_modelo"
                    + " INNER JOIN tipo_piso t ON t.id = n.tipo_piso"
                    + " WHERE c.id = (SELECT MAX(c.id) FROM control_cambio_neumatico c WHERE c.id_vehiculo = " + idVehiculo + ")"
                    + " ORDER BY d.posicion;");
            while (rs.next()) {
                DetalleControlCambioNeumatico detalle = new DetalleControlCambioNeumatico();
                Neumaticos n = new Neumaticos();
                n.setId(rs.getInt(1));
                n.setCodigo(rs.getString(2));
                n.setNumRenovaciones(rs.getInt(3));

                ModelosBandaNeumatico m = new ModelosBandaNeumatico();
                m.setMedida(rs.getString(4));
                n.setIdModelo(m);

                MarcasNeumatico marca = new MarcasNeumatico();
                marca.setNombre(rs.getString(5));
                n.setIdMarca(marca);

                Categorias categoria = new Categorias();
                categoria.setId(rs.getInt(9));
                n.setIdCategoria(categoria);
                n.setNumSerie(rs.getString(10));
                TipoPiso tipoPiso = new TipoPiso();
                tipoPiso.setNombre(rs.getString(8));
                n.setTipoPiso(tipoPiso);

                detalle.setIdNeumatico(n);
                detalle.setTipo(rs.getInt(6));
                detalle.setPosicion(rs.getInt(7));
                detalle.setObservacion(rs.getString(11));

                lst.add(detalle);
            }
            rs.close();
            st.close();
            cn.close();
        } catch (SQLException ex) {
            Logger.getLogger(ControlCambioNeumaticoJdbcControler.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lst;
    }

    public List<DetalleControlCambioBateria> findUltimoDetalleControlCambioBaterias(int idVehiculo) {
        List<DetalleControlCambioBateria> lst = new ArrayList<DetalleControlCambioBateria>();
        Connection cn = ConexionSQL.obtenerConexion();
        Statement st;
        try {
            st = cn.createStatement();
            ResultSet rs = st.executeQuery("SELECT d.id_bateria, b.codigo, b.nro_placas, m.nombre, d.tipo, "
                    + " d.posicion, b.id_categoria"
                    + " FROM detalle_control_cambio_bateria d"
                    + " INNER JOIN control_cambio_neumatico c ON c.id = d.id_control_cambio_neumatico"
                    + " INNER JOIN baterias b ON b.id = d.id_bateria"
                    + " LEFT JOIN marcas_bateria m ON m.id = b.id_marca"
                    + " WHERE c.id = (SELECT MAX(c.id) FROM control_cambio_neumatico c WHERE c.id_vehiculo = " + idVehiculo + ")"
                    + " ORDER BY d.posicion;");
            while (rs.next()) {
                DetalleControlCambioBateria detalle = new DetalleControlCambioBateria();
                Baterias b = new Baterias();
                b.setId(rs.getInt(1));
                b.setCodigo(rs.getString(2));
                b.setNroPlacas(rs.getInt(3));

                MarcasBaterias marca = new MarcasBaterias();
                marca.setNombre(rs.getString(4));
                b.setIdMarca(marca);

                Categorias categoria = new Categorias();
                categoria.setId(rs.getInt(7));
                b.setIdCategoria(categoria);

                detalle.setIdBateria(b);
                detalle.setTipo(rs.getShort(5));
                detalle.setPosicion(rs.getShort(6));

                lst.add(detalle);
            }
            rs.close();
            st.close();
            cn.close();
        } catch (SQLException ex) {
            Logger.getLogger(ControlCambioNeumaticoJdbcControler.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lst;
    }

    public ControlCambioNeumatico findUltimoControlCambio(int idVehiculo) {
        ControlCambioNeumatico control = null;
        EntityManagerFactory emf = JPAUtil.getEntityManagerFactory();
        EntityManager em = emf.createEntityManager();
        try {
            Query q = em.createQuery("SELECT C FROM ControlCambioNeumatico C "
                    + "WHERE C.idVehiculo.id = :idVehiculo ORDER BY C.id DESC");
            q.setParameter("idVehiculo", idVehiculo);
            q.setMaxResults(1);
            List<ControlCambioNeumatico> lst = q.getResultList();
            if(!lst.isEmpty()) {
                control = lst.get(0);
            }
        } catch (Exception e) {
            Logger.getLogger(ControlCambioNeumaticoJdbcControler.class.getName()).log(Level.SEVERE, null, e);
        }

        return control;
    }
}
